package it.traveldream.Util;

import java.util.ArrayList;
import java.util.Iterator;

import it.traveldream.EJB.DTO.GiftListDTO;
import it.traveldream.EJB.DTO.PacchettoDTO;
import it.traveldream.ManagedBeans.AlloggioBean;
import it.traveldream.ManagedBeans.GiftListMBean;

public class GLView {

	private PacchettoDTO pacchetto;
	private GiftListDTO datiTrasportoAndata;
	private GiftListDTO datiTrasportoRitorno;
	private GiftListDTO datiAlloggio;
	private ArrayList<GiftListDTO> datiEscursioni;

	private double prezzoCamera;

	public GLView(){

		pacchetto = new PacchettoDTO();
		datiTrasportoAndata = new GiftListDTO();
		datiTrasportoRitorno = new GiftListDTO();
		datiAlloggio = new GiftListDTO();
		datiEscursioni = new ArrayList<GiftListDTO>();

	}

	public GLView fill (ArrayList<GiftListDTO> g){

		Iterator<GiftListDTO> it  = g.iterator();
		GiftListDTO help = new GiftListDTO();

		while (it.hasNext()){


			help = it.next();

			switch (help.getTipo_servizio_base()){

			case 1 :

				if(help.getIdServizioBase() == help.getPacchetto().getTrasportAndata().getIdTrasporto()){
					this.datiTrasportoAndata = help;
				}

				if(help.getIdServizioBase() == help.getPacchetto().getTrasportRitorno().getIdTrasporto()){
					this.datiTrasportoRitorno = help;
				}
				break;
			case 2:
				if(help.getIdServizioBase() == help.getPacchetto().getAlloggi().getIdAlloggio()){
					this.datiAlloggio = help;
				}
				break;

			default:
				datiEscursioni.add(help);
			}
		}

		this.pacchetto = help.getPacchetto();

		return this;
	}


	/**
	 * Metodo utilizzato dalla GUI per ottenere il prezzo scontato di un certo servizio base
	 * 
	 * @param prezzo - Stringa passata dalla pagina JSF contenente un double
	 * @return
	 */
	public double dammiPrezzoSC(String prezzo){
		try{
			Double ret = new Double(prezzo);
			return (double) Math.round((ret*(100-pacchetto.getSconto())/100) * 100) / 100;
		}catch(Exception e){
			return 0;
		}
		
	}


	// setter e getter
	/**
	 * @return the pacchetto
	 */
	public PacchettoDTO getPacchetto() {
		return pacchetto;
	}
	/**
	 * @return the datiTrasportoAndata
	 */
	public GiftListDTO getDatiTrasportoAndata() {
		return datiTrasportoAndata;
	}
	/**
	 * @return the datiTrasportoRitorno
	 */
	public GiftListDTO getDatiTrasportoRitorno() {
		return datiTrasportoRitorno;
	}
	/**
	 * @return the datiAlloggio
	 */
	public GiftListDTO getDatiAlloggio() {
		return datiAlloggio;
	}
	/**
	 * @return the datiEscursioni
	 */
	public ArrayList<GiftListDTO> getDatiEscursioni() {
		return datiEscursioni;
	}
	/**
	 * @param pacchetto the pacchetto to set
	 */
	public void setPacchetto(PacchettoDTO pacchetto) {
		this.pacchetto = pacchetto;
	}
	/**
	 * @param datiTrasportoAndata the datiTrasportoAndata to set
	 */
	public void setDatiTrasportoAndata(GiftListDTO datiTrasportoAndata) {
		this.datiTrasportoAndata = datiTrasportoAndata;
	}
	/**
	 * @param datiTrasportoRitorno the datiTrasportoRitorno to set
	 */
	public void setDatiTrasportoRitorno(GiftListDTO datiTrasportoRitorno) {
		this.datiTrasportoRitorno = datiTrasportoRitorno;
	}
	/**
	 * @param datiAlloggio the datiAlloggio to set
	 */
	public void setDatiAlloggio(GiftListDTO datiAlloggio) {
		this.datiAlloggio = datiAlloggio;
	}
	/**
	 * @param datiEscursioni the datiEscursioni to set
	 */
	public void setDatiEscursioni(ArrayList<GiftListDTO> datiEscursioni) {
		this.datiEscursioni = datiEscursioni;
	}


	/**
	 * Metodo che, dato l'ID di una escursione, recupero il valore della variabile "acquistato" contenuta
	 * nel corrispondente gift list DTO.
	 * @param id_esc - Stringa (dalle pagine jsf posso solo passare stringhe) contenente l'ID dell'escursione
	 * @return - il valore della variabile {@code acquistato} nel gift list DTO corrispondente
	 */
	public int dammiEscursioneAcquistata(String id_esc){
		Integer id = new Integer(id_esc);

		Iterator<GiftListDTO> it = datiEscursioni.iterator();
		System.out.print("pippo2 " + datiEscursioni.size());

		GiftListDTO help;
		while(it.hasNext()){
			help = it.next();
			if(help.getIdServizioBase() == id){
				System.out.print(help.getIdServizioBase() +" Stato escursione " + help.getAcquistato() +" FOUND!!");
				return help.getAcquistato();
			}
		}
		return -1;
	}


	/**
	 * Metodo che, dato l'ID di una escursione, recupero il valore della variabile "acquistato_da" contenuta
	 * nel corrispondente gift list DTO.
	 * 
	 * @param id_esc - Stringa (dalle pagine jsf posso solo passare stringhe) contenente l'ID dell'escursione
	 * @return - il valore della variabile {@code acquistato_da} nel gift list DTO corrispondente
	 */
	public String dammiEscursioneAcquistataDa(String id_esc){
		Integer id = new Integer(id_esc);
		Iterator<GiftListDTO> it = datiEscursioni.iterator();
		GiftListDTO help;
		while(it.hasNext()){
			help = it.next();
			if(help.getIdServizioBase() == id)
				return help.getAcquistatoDa();
		}

		return "Unknown";
	}


	/**
	 * Metodo che, dato l'id di una escursione tra quelle "contenute" in questo pacchetto,
	 * ritorna il corrispondente {@code idElemento}, ossia la chiave primaria della tabella GiftList sul DB
	 * 
	 * Viene utilizzato dall'interfaccia per recuperare l'{@code idElemento} da passare al metodo
	 * {@link GiftListMBean #buyGiftElement(String)}
	 * 
	 * @param id_escursione - Stringa contenente l'id dell'escursione che si vuole acquistare
	 * @return un intero che rappresenta l'idElemento della tabella giftlist corrispondente all'escursione che si vuole comprare
	 * in questo pacchetto
	 */
	public int dammiIdElementoFromIdEscursione(String id_escursione){

		Integer id= new Integer(id_escursione);
		Iterator<GiftListDTO> it = datiEscursioni.iterator();
		GiftListDTO help;
		while(it.hasNext()){
			help = it.next();
			if(help.getIdServizioBase() == id)
				//se ho trovato l'escursione che voglio comprare, ritorno l'id della corrispondente entry della tabella giftlist
				return help.getIdElemento();		
		}

		return -1;
	}

	public double getPrezzoCamera() {
		return prezzoCamera;
	}

	public void setPrezzoCamera(double prezzoCamera) {
		this.prezzoCamera = prezzoCamera;
	}

}
